home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / dskut / sysgn132.zip / SYSGEN.PAS < prev   
Pascal/Delphi Source File  |  1989-12-11  |  12KB  |  415 lines

  1. PROGRAM Sysgen;
  2.  
  3. (*
  4.  
  5.   Roger Link 12/08/89
  6.  
  7. *)
  8.  
  9. USES
  10.   DOS, CRT;
  11.  
  12. CONST
  13.   Black     = 0;     Blue      = 1;    Green     = 2;     Cyan      = 3;
  14.   Red       = 4;     Magenta   = 5;    Brown     = 6;     L_Gray    = 7;
  15.   Gray      = 8;     L_Blue    = 9;    L_Green   = 10;    L_Cyan    = 11;
  16.   L_Red     = 12;    L_Magenta = 13;   Yellow    = 14;    White     = 15;
  17.  
  18.   ErrorColor = Red;
  19.  
  20. TYPE
  21.   LineType = STRING[ 255 ];
  22.  
  23. VAR
  24.   Sysgen_Value     : INTEGER;
  25.  
  26.   OutputFile       : TEXT;
  27.  
  28.   Sysgen_FileName  : LineType;
  29.  
  30.   FileOpen         : BOOLEAN;
  31.  
  32.   Help             : BOOLEAN;
  33.   FatalError       : BOOLEAN;
  34.   QueryUser        : BOOLEAN;
  35.  
  36.  
  37. PROCEDURE SignOn;
  38. BEGIN
  39.   TextColor( Magenta );
  40.   WriteLn;
  41.   WriteLn( '** Link Sysgen Utility - V1.32 12/08/89 **' );
  42.   WriteLn;
  43. END;  (* SignOn *)
  44.  
  45.  
  46. PROCEDURE DoHelpScreen;
  47. BEGIN
  48.  TextColor( L_Green );
  49.  WriteLn( 'SYSGEN [-Ffilename.type] [-Q] [-?] [?] [#]' );
  50.  TextColor( Green);
  51.  WriteLn( '  - Square brackets "[ ]" indicate a option' );
  52.  WriteLn( '  - filename.type is the configuration file to use (defaults to sysgen.cfg)' );
  53.  WriteLn( '  - # = sysgen value number in range 0-9' );
  54.  WriteLn( '  - ALL OPTIONS MUST have spaces proceeding and preceding that option' );
  55.  WriteLn( '  "-Q" -> Enter Query mode      "-?" or "?" This help screen' );
  56.  WriteLn( ' If no parameters, sysgen enters query mode.'  );
  57.  WriteLn;
  58.  WriteLn( ' Column one of each line in the config file controls the primary use of that' );
  59.  WriteLn( 'line. Columns 2-10 control the secondary use of the line. If the line is to' );
  60.  WriteLn( 'be included/interperted, a character is put in the sysgen value+1 position to' );
  61.  WriteLn( 'indicate it.' );
  62.  WriteLn( '  The following commands are used: ' );
  63.  WriteLn( '  "V" -> Variable line used for naming/allocating sysgen value when' );
  64.  WriteLn( '         sysgen is used in query mode.' );
  65.  WriteLn( '  "F" -> FILENAME.TYPE to put following SYSGEN.File data lines into' );
  66.  WriteLn( '  "-" -> Output file data line' );
  67.  WriteLn( '  "." -> Meta commands:' );
  68.  WriteLn( '         "E" -> Echo the line. (unconditional echo)' );
  69.  WriteLn( '         ";" -> comment line for sysgen config file. (ignored by sysgen)' );
  70.  WriteLn( '  "E" -> Echo line (conditional)' );
  71. END;  (* DoHelpScreen *)
  72.  
  73.  
  74. PROCEDURE Do_Error( Line : LineType; ErrorPointer : INTEGER );
  75. BEGIN
  76.   TextColor( ErrorColor );
  77.   WriteLn( Line );
  78.   WriteLn( ' ':ErrorPointer - 1, '^--- Error' );
  79. END;  (* Do_Error *)
  80.  
  81.  
  82. FUNCTION Check( Line : LineType; Sysgen_Value : INTEGER ) : BOOLEAN;
  83. (* Determine if this Line has a character in the proper position to *)
  84. (* match Sysgen_Value. Any character will do!!! *)
  85. BEGIN
  86.   IF Length( Line ) > 9 THEN              (* Check for short lines *)
  87.     Check := ( Line[ Sysgen_Value + 1 ] ) <> ' '
  88.   ELSE
  89.     BEGIN
  90.       Do_Error( Line, 3 );                (* Go if line is too short....*)
  91.       Check := FALSE;
  92.     END;
  93. END;  (* Check *)
  94.  
  95.  
  96. PROCEDURE Do_MetaStuff( Line : LineType );
  97. BEGIN
  98.   Case Line[ 2 ] OF
  99.     'E' : BEGIN
  100.             Delete( Line, 1, 2 );   (* Delete ".;" *)
  101.             TextColor( Green );
  102.             WriteLn( Line );        (* Display the rest to the user *)
  103.           END;
  104.     ';' : BEGIN END;       (* Do nothing for comment line *)
  105.   ELSE
  106.     Do_Error( Line, 2 );            (* Un recoginized meta command *)
  107.   END;
  108. END; (* Do_MetaStuff *)
  109.  
  110.  
  111. PROCEDURE Do_FileName( Line : LineType; Sysgen_Value : INTEGER );
  112. VAR
  113.   FileName : LineType;
  114. BEGIN
  115.   IF Check( Line, Sysgen_Value ) THEN         (* If this line is to be used *)
  116.     BEGIN                                     (*  for this system *)
  117.       IF FileOpen THEN
  118.         Close( OutputFile );                  (* Close any files that we are *)
  119.                                               (*  working on *)
  120.       TextColor( Green );
  121.       Delete( Line, 1, 10 );                  (* Delete prefix *)
  122.       FileName := Line;                       (* Fire up the Name *)
  123.       WriteLn( 'Output File = ', FileName );
  124.  
  125.       Assign( OutputFile, FileName );
  126.       ReWrite( OutputFile );
  127.  
  128.       FileOpen := TRUE;                      (* Remember that we have a file *)
  129.     END;                                     (*  open *)
  130. END;  (* Do_FileName*)
  131.  
  132.  
  133.  
  134. PROCEDURE Do_OutputLine( Line : LineType; Sysgen_Value : INTEGER );
  135. BEGIN
  136.   IF Check( Line, Sysgen_Value ) THEN        (* Check to see if this line is *)
  137.     BEGIN                                    (*  to be used *)
  138.       Delete( Line, 1, 10 );                 (* Delete prefix *)
  139.       WriteLn( OutputFile, Line );           (* Put out line *)
  140.     END;
  141. END;  (* Do_OutputLine *)
  142.  
  143.  
  144.  
  145. PROCEDURE Do_Echo( Line : LineType; Sysgen_Value : INTEGER );
  146. BEGIN
  147.   IF Check( Line, Sysgen_Value ) THEN        (* Check to see if this line is *)
  148.     BEGIN                                    (*  to be used *)
  149.       Delete( Line, 1, 10 );                 (* Delete prefix *)
  150.       TextColor( L_Green );
  151.       WriteLn( Line );                       (* Display to user *)
  152.     END;
  153. END;  (* Do_Echo *)
  154.  
  155.  
  156.  
  157. PROCEDURE SysgenWork( Sysgen_FileName : LineType; Sysgen_Value : INTEGER );
  158. VAR
  159.   Sysgen_File : TEXT;
  160.   Line        : LineType;
  161.   Test        : INTEGER;
  162. BEGIN
  163.   TextColor( Green );
  164.  
  165.   WriteLn( 'Using sysgen file -> ', Sysgen_FileName );
  166.  
  167.   Assign( Sysgen_File, Sysgen_FileName );  (* Open configuration file *)
  168.   Reset( Sysgen_File );
  169.  
  170.   FileOpen := FALSE;                       (* No files are currently open *)
  171.  
  172.   WHILE NOT( EOF( Sysgen_File )) DO
  173.     BEGIN
  174.       ReadLn( Sysgen_File, Line );         (* Get a config line *)
  175.  
  176.       IF Length( Line ) > 1 THEN
  177.         CASE Line[ 1 ] OF                  (* "Parse" config line *)
  178.           '.' : Do_MetaStuff( Line );
  179.           'F' : Do_FileName( Line, Sysgen_Value );
  180.           '-' : Do_OutputLine( Line, Sysgen_Value );
  181.           'E' : Do_Echo( Line, Sysgen_Value );
  182.           'V' : ;                          (* Ingore variable lines *)
  183.         ELSE
  184.           Do_Error( Line, 1 );
  185.         END;
  186.     END;
  187.  
  188.   IF FileOpen THEN Close( OutputFile );    (* Close any files that we have *)
  189.                                            (*  open *)
  190.   Close( Sysgen_File );
  191. END;  (* SysgenWork *)
  192.  
  193.  
  194.  
  195. PROCEDURE DoSysgen( Sysgen_FileName : LineType; Sysgen_Value : INTEGER );
  196. VAR
  197.   Character : CHAR;
  198. BEGIN
  199.   IF Sysgen_Value = 0 THEN
  200.     BEGIN
  201.       TextColor( Red );
  202.       WriteLn( '** Sysgening --> NO SYSTEM **' );
  203.       TextColor( CYAN );
  204.       WriteLn( 'THIS WILL ERASE \AUTOEXEC.BAT & \CONFIG.SYS', ^G );
  205.       Write( 'Do you want to do this? (Y/x) ' );
  206.       TextColor( Brown );
  207.       ReadLn( Character );
  208.  
  209.       TextColor( Green );
  210.       IF UpCase( Character ) = 'Y' THEN
  211.        BEGIN
  212.          WriteLn( '    Erasing \autoexec.bat' );
  213.          Assign( OutputFile, '\AUTOEXEC.BAT' );
  214.          Erase( OutputFile );
  215.          WriteLn( '    Erasing \config.sys' );
  216.          Assign( OutputFile, '\CONFIG.SYS' );
  217.          Erase( OutputFile );
  218.        END
  219.       ELSE
  220.         WriteLn( '* * * No Sysgen action taken * * *' );
  221.     END
  222.   ELSE
  223.     SysgenWork( Sysgen_FileName, Sysgen_Value );
  224. END;  (* DoSysgen *)
  225.  
  226.  
  227. PROCEDURE DoQueryUser;
  228. VAR
  229.   InputFile        : Text;
  230.   SystemAvailable  : Array[ 1..9 ] OF INTEGER;
  231.   SystemAvailPoint : INTEGER;
  232.   Line             : LineType;
  233.   GoodSysgen       : BOOLEAN;
  234.   X                : INTEGER;
  235.  
  236. PROCEDURE ProcessQueryLine;
  237. VAR
  238.   X                : INTEGER;
  239. BEGIN
  240.   IF Length( Line ) < 10 THEN Do_Error( Line, 1 );
  241.  
  242.   Delete( Line, 1, 1 );     (* Get rid of V *)
  243.  
  244.   TextColor( Cyan );
  245.  
  246.   FOR X := 1 TO 9 DO
  247.    BEGIN
  248.      IF Line[ 1 ] <> ' ' THEN   (* We have found a valid system value *)
  249.       BEGIN
  250.        INC( SystemAvailPoint );
  251.        SystemAvailable[ SystemAvailPoint ] := X; (* Remember valid system #s *)
  252.        Write( X:2 );                             (* Display # to user *)
  253.       END;
  254.      Delete( Line, 1, 1 );
  255.    END;
  256.  
  257.   TextColor( Green );
  258.  
  259.   WriteLn( ' ', Line );         (* Display system name/message to user *)
  260. END;
  261.  
  262.  
  263. BEGIN
  264.   TextColor( Yellow );
  265.  
  266.   WriteLn( 'For SYSGEN he